package com.tedu.api;

import org.junit.Test;

/**
 * Java面向对象---不是真的面向对象---八大基本数据类型
 * 创建对象--类【属性，构造者，方法】
 * 八个包装类：针对八大基础类型提供对应类【方法基本上互通】
 *      不可改变的类
 * 包装类包位置：java.long
 * 八大基本类型            针对八大基本类型对应包装类
 * int                      Integer    继承Number 父类【抽象】
 * long                     long       继承Number 父类【抽象】
 * double                   Double     继承Number 父类【抽象】
 * short                    Short      继承Number 父类【抽象】
 * float                    Float      继承Number 父类【抽象】
 * byte                     Byte       继承Number 父类【抽象】
 * char                     Character  继承Object 父类
 * boolean                  Boolean    继承Object 父类
 */
public class PackingAPI {
    @Test
    public void test(){
        int a=1;  //不是面向对象,通过。【反射】
         //创建int类型对象：Integer构造器：引用|直接写
        Integer i=new Integer(a);
        i.toString();
    }

    /**
     * 包装类API
     * xxxValue方法      返回值：对应数据类型
     * 作用：把包装类转换为基本数据类型的方法
     * 测试：6个包装类
     */
    @Test
    public void testxxxValue() {
        Integer i = new Integer(2);//打包：对应类型放入包装类
        i.intValue();  //接收：int类型和Integer
        System.out.println(i);
        //测试：其他7个包装类
        String s1 = "123.123";
        Double d = new Double(s1);
        d.doubleValue();
        System.out.println(d);

        String s2 = "1";
        Byte b = new Byte(s2);
        b = b.byteValue();
        System.out.println(b);

        String s3 = "123,123f";
        Float f = new Float(125.F);
        Float f1 = f.floatValue();
        System.out.println(f1);

        //包装类构造器：直接传值，【使用字符串传值：long包装认为l字符。并不是数值】
        String s4 = "123L";
        //Long 异常NumberFormatException 数值传唤异常
        Long l = new Long(5678L);
        l = l.longValue();
        System.out.println(l);

        System.out.println(l);

        String s5 = "true";
        Boolean b1 = new Boolean(s5);
        b1 = b1.booleanValue();
        System.out.println(b1);

        char s6 = 'a';
        Character c = new Character(s6);
        c.charValue();
        System.out.println(c);
    }
    /**
     * 包装类-----Servlet[JavaBean]
     * public class Person{
     *     Integer id; //成员 ---解析
     *
     * }
     * parseXXX{}
     * 作用：获取到的字符串转换为对应类型
     */
    @Test
    public void testParseXXX(){
        String s="123";//将字符串转换为整形
        int i=Integer.parseInt(s);//区别：解析字符串，转换为正确类型

        int is=Integer.valueOf(s);//区别：存入值，打包拆包获取值
        System.out.println(i==is);
        //将整形转换为字符串
        String s1=String.valueOf(123);//与包装类，用法一致，实现不一致
        //自己测：String s2="465f"; char s3="a";
        String s2="465f";
        float f=Float.parseFloat(s2);
        // Boolean.parseBoolean(s2);
        System.out.println(f);


        char s3='a';
        //Character. 没有针对字符解析
    }
    /**
     * 自动拆装箱
     * JDK1.5之前没有自动拆装箱
     * JDK1.5之后有自动拆装箱   2004
     */
    @Test
    public void testJ(){
        //JDK4.5之前没有自动拆装器
        Integer in=Integer.valueOf(1);//装箱
        int ii=in.intValue();//拆箱
        Integer i=1;
        int is=i;
        //编译器帮我们写了拆装箱过程----JVM虚拟机认1.5之前写法
    }
}


